package main

import (
	"sipserver/api"
	"sipserver/sip"
	"sipserver/media"
	"sipserver/utils"
	"gopkg.in/yaml.v3"
	"io/ioutil"
	"fmt"
	"strconv"
)

func ReadRunBaseSetting() (string,  int, int){
	// 读取 YAML 文件
	yamlFile, err := ioutil.ReadFile("./api/device.yaml")
	if err != nil {
		fmt.Println("读取 YAML 文件时出错: %v", err)
	}

	// 定义配置结构体实例
	var configB sip.Config

	// 解析 YAML 数据到结构体
	err = yaml.Unmarshal(yamlFile, &configB)
	if err != nil {
		fmt.Println("解析 YAML 数据时出错: %v", err)
	}

	// 输出解析结果
	// fmt.Printf("SIP主机: %s\n", configB.Database.Host)
	// fmt.Printf("SIP端口: %d\n", configB.Database.Port)
	// fmt.Printf("SIP服务器ID: %s\n", configB.Database.Username)
	// fmt.Printf("SIP服务器密码: %s\n", configB.Database.Password)
	// fmt.Printf("SIP服务器域: %s\n", configB.Database.Area)
	// fmt.Printf("主服务器地址: %s\n", configB.Server.Address)
	// fmt.Printf("主服务器端口: %d\n", configB.Server.Port)

	return configB.Database.Host, configB.Database.Port,  configB.Server.Port
}

func main() {

	utils.InitConfig() // 初始化一般配置
	utils.InitMysql()  // 初始化数据库连接

	ip,port, inner_port := ReadRunBaseSetting()
	fmt.Println("set local ip is "+ ip + ":" + strconv.Itoa(port) +"!")

	// 启动SIP服务器
	sipServer, err := sip.NewSIPServer("0.0.0.0:"+strconv.Itoa(port))
	if err != nil {
		panic(err)
	}
	go sipServer.Start()

	go media.StartRTSP()

	go media.StartRTMP()

	go media.StartHTTPVideo()

	// 启动API服务器
	api.StartAPIServer(":"+strconv.Itoa(inner_port),sipServer)

}